// 信息提示
import { Message } from 'element-ui'


// websocket对象
var websocket = {
  // websocket建立连接
  Init(sessionCode) {
    return new Promise((resolve,reject)=>{
      // 判断浏览器是否支持websocket
      if (!'WebSocket' in window) {
        console.log('您的浏览器不支持WebSocket');
        this.$modal.msgError('您的浏览器不支持WebSocket')
        return reject();
      }
      // 创建websocket实例

      // websocket地址
      var url = process.env.VUE_APP_SOCKET_API + '/ws/game/' + sessionCode
      console.log(url,'ur;;;;;;')
      // websocket实例
      var ws = new WebSocket(url)
      // 重连定时器实例
      var tt
      // websocket重连开关
      var websocketswitch = true
      // + '?userId=' + userId
      
      // 监听websocket连接
      ws.onopen = function () {
        console.log('websocket连接成功');
        ws.timer = window.setInterval(function () { //每隔5秒钟发送一次心跳，避免websocket连接因超时而自动断开
          var ping = {
            commId: '',
          };
          ws.send(JSON.stringify(ping));
        }, 5000);
        return resolve(ws)
      }
      // 监听websocket连接错误信息
      ws.onerror = function (e) {
        console.log('重连开关', websocketswitch)
        console.log('数据传输发生错误', e)
        Message({
          message: 'websocket传输发生错误',
          type: 'error'
        })
        // 打开重连
        reconnect()
      }
      // 监听websocket接受消息
      ws.onmessage = function (e) {
        // console.log('接收后端消息:' + e.data)
        //心跳消息不做处理
        if (e.data === 'ok') {
          return
        }
        // Message({
        //   message: e.data,
        //   type: 'success'
        // })
      }
      ws.onclose = function (e) {
        console.log('websocket 断开');
        console.log(e.code + ' ' + e.reason + ' ' + e.wasClean);
        clearInterval(ws.timer )

      }
      
    })
  },
  // websocket连接关闭方法
  Close() {
    //关闭断开重连机制
    websocketswitch = true
    ws.close()
  },
  // websocket发送信息方法
  Send(data) {
    // 处理发送数据JSON字符串
    let msg = JSON.stringify(data)
    // 发送消息给后端
    ws.send(msg)
  },
  // 暴露websocket实例
  getwebSocket(sessionCode) {
    this.Init(sessionCode);
    return ws
  }
}

// 监听窗口关闭事件，当窗口关闭时-每一个页面关闭都会触发-扩张需求业务
window.onbeforeunload = function () {
  console.log('测试方法执行了')
}

// 浏览器刷新重新连接
// 刷新页面后需要重连-并且是在登录之后
// if (window.performance.navigation.type == 1 && getToken()) {
//   console.log('浏览器刷新了')
//   //刷新后重连
//   websocket.Init()
// }
// 重连方法
function reconnect() {
  console.log('重连开关', websocketswitch)
  // 判断是否主动关闭连接
  if (websocketswitch) {
    return
  }
  // 重连定时器-每次websocket错误方法onerror触发他都会触发
  tt && clearTimeout(tt)
  tt = setTimeout(function () {
    console.log('执行断线重连...')
    websocket.Init()
    websocketswitch = false
  }, 4000)
}

// 暴露对象
export default websocket